WordPress migration is an important task that allows you to shift from one provider to another. Usually, when you experience site performance issues linked to underlying infrastructure performance, migrating your site to a new host can improve your general site reliability and ranking.
In a shared hosting environment, cPanel and Plesk are two of the most popular control panels that offer a graphical web interface that allows you to manage your server features and functions. Among the key advantages to consider when migrating from cPanel or Plesk to Dekopon Stack include the following:
This article explains how to migrate your WordPress site from cPanel or Plesk to Dekopon Stack using a Ubuntu production server. You are to apply the FTP or SFTP to handle file transfer, and mysqldump
to restore your WordPress database on the server.
Before you begin, make sure you:
Deploy a OneClick WordPress server on Dekopon Stack using the Dekopon Stack Marketplace application
Or, you can deploy a cPanel or Plesk server using a OneClick application from the Dekopon Stack Marketplace to keep your graphical management environment when switching providers.
Have access to the WordPress site domain DNS records
Use SSH to access the WordPress server
Create a standard user with sudo privileges. For example webadmin
Switch to the new user account
# su webadmin
WordPress requires a set of PHP extensions to run correctly on your server. By default, the Dekopon Stack OneClick WordPress image run all necessary extensions, a database server, and Nginx as the web server. In this section, create the WordPress MySQL database, and test your web server configuration as described in the following steps.
Verify the installed PHP version
$ php -v
Output:
PHP 8.1.21 (cli) (built: Jul 12 2023 23:03:54) (NTS)
Copyright (c) The PHP Group
Make sure the PHP version is 7.4
and above as required by WordPress
To prepare the WordPress database. Log in to the MySQL database server as the root
user
$ sudo mysql
If the above command fails to run, log in with the root user password
$ sudo mysql -u root -p
To view the default Dekopon Stack server database password, run the following command
$ sudo cat /root/.db_password
Create a new database
mysql> CREATE DATABASE wordpressdb;
Create a new database user with a strong password.
mysql> CREATE USER 'adminuser'@'localhost' IDENTIFIED BY 'YOUR STRONG PASSWORD';
Grant the user administrative privileges to the database
mysql> GRANT ALL PRIVILEGES ON wordpressdb.* TO adminuser@localhost
Refresh MySQL privileges
mysql> FLUSH PRIVILEGES
Exit the MySQL console
mysql> EXIT
To set up the web server, create a new web root directory to store WordPress files
$ sudo mkdir -p /var/www/example.com
Switch to the main Nginx configuration files directory /etc/nginx
$ cd /etc/nginx/
> The Dekopon Stack OneClick application uses the LEMP (Linux, Nginx, MySQL, PHP) stack. When using LAMP, switch to the Apache directory instead
Deactivate the default WordPress configuration files
$ sudo rm /etc/nginx/sites-enabled/*
Create a new WordPress configuration file in the sites-available
directory
$ sudo touch /etc/nginx/sites-available/example.com
Using a text editor such as nano
, edit the file
$ sudo nano /etc/nginx/sites-available/example.com
Add the following configurations to the file. Replace example.com
with your actual WordPress domain name
server {
listen 80;
server_name example.com www.example.com;
# WordPress web root directory
root /var/www/example.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP Configuration
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Update the PHP-FPM socket path
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
# Set Expiry Headers
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
# Disable XML-RPC
location = /xmlrpc.php {
deny all;
}
# Enable Gzip compression
gzip on;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
Save and close the file
Activate the configuration file
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Test the Nginx configuration for errors
$ sudo nginx -t
When the web server configuration is valid, your output should look like the one below:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
In case the test returns any errors. Fix the indicated error to avoid breaking your web server configuration
Restart Nginx to apply your WordPress host configuration changes
$ sudo systemctl restart nginx
To migrate your WordPress site from cPanel to Dekopon Stack. Verify that your cPanel account supports FTP accounts, then back up your WordPress files and database to restore them on the target Dekopon Stack WordPress server as described in the steps below.
In the Files section, click to open File Manager
Find and view your WordPress web root directory. Usually /public_html
or your-domain.com
depending on your account setup
On the top bar, click Select All to start the WordPress backup process.
Click Compress to create a backup archive file.
In the Compress dialog, select your desired Compression Type. For the best results, select GZiped Tar Archive
Verify that all WordPress files are available on the Files to compress list
Enter a custom name to assign the backup file. For example, backup.tar.gz
Wait for the backup process to complete, and close the Compression Results dialog
Verify that a new archive file is available in your target directory
Navigate to the main cPanel dashboard
Find the Databases section, and click phpMyAdmin
Within the phpMyAdmin interface, find and click your target WordPress database on the left navigation menu
In cases where you have multiple WordPress websites, view your target site's
wp-config.php
file and note the database name
Click Export on the main navigation bar
In the Export Method:, keep Quick-display only the minimal options
selected
Keep SQL
as the Format:, and click Export to download the WordPress database backup to your computer
When the download is complete, visit your downloads directory and verify that a new .sql
file is available on your computer
To access the database in your cPanel files, navigate to the File Manager
Switch to the WordPress files directory and upload the database.sql
file to the path
When the database upload is complete, prepare your account for transfer to the new WordPress server
Navigate to your main cPanel account dashboard
Find the Files section, and click FTP Accounts
Within the Add FTP Account form, enter your desired username in the Log In field. For example wpbackup
Enter a strong password in the appropriate fields
In the Directory field, replace the placeholder values with your WordPress web root directory public_html/
Keep the Quota set to unlimited
Click Create FTP Account to add the FTP Account to your server
Verify that the account gets created, and it’s listed in the FTP Accounts section
Using SSH, access your Dekopon Stack WordPress server
$ ssh webadmin@SERVER-IP
Establish an FTP connection to your cPanel server. Replace example.com
with your actual domain name
$ ftp wpbackup@example.com
List files in the directory.
> ls
Verify that the backup.tar.gz
and your database.sql
files are available. If the user is only permitted to access /public_html
, only WordPress files should display in the directory.
Download the WordPress files archive file to your server
> get backup.tar.gz
Output:
local: backup.tar.gz remote: backup.tar.gz
200 EPRT command successful
150 Opening BINARY mode data connection for backup.tar.gz (3236 bytes)
100% |*********************************************************************************************************************************************| 3236 6.50 MiB/s 00:00 ETA
226 Transfer complete
3236 bytes received in 00:00 (16.41 KiB/s)
Download the database backup file
> get database.sql
Monitor the FTP get
progress, and close the FTP connection when complete
> exit
List files and verify that all backup files are available in your working directory
$ ls
Extract files from the WordPress tar.gz
archive to your web root directory
$ sudo tar -xzvf backup.tar.gz -C /var/www/example.com/
When the extraction is complete, grant the web server ownership privileges to the directory
$ sudo chown -R www-data:www-data /var/www/example.com
Restore the WordPress database to the MySQL database you created earlier
$ mysql -u adminuser -p wordpressdb < database.sql
When the restoration completes without errors, Log in to the MySQL database server
$ mysql -u adminuser -p
Switch to the WordPress database
mysql> USE wordpressdb;
Show the database tables to verify that all WordPress tables are available
mysql> SHOW TABLES:
Output:
+----------------------------+
| Tables_in_wordpressdb |
+----------------------------+
| wp_actionscheduler_actions |
| wp_actionscheduler_claims |
| wp_actionscheduler_groups |
| wp_actionscheduler_logs |
| wp_as3cf_items |
| wp_commentmeta |
| wp_comments |
Exit the MySQL console
mysql> EXIT
You have migrated your WordPress site from cPanel to your Dekopon Stack WordPress server. Complete the migration process by setting up the correct DNS records and verify that you can access the WordPress site when DNS propagation is complete.
To migrate your WordPress site from Plesk to your Dekopon Stack WordPress server. Log in to your Plesk account to access the control panel interface and carry out backup actions as described in the steps below.
On the left navigation menu, click Files to open the File Manager
Within the File Manager interface, find and click httpdocs
or your WordPress files directory such as example.com
Check the Select All box next to Name to choose all WordPress files in the directory
On the top menu bar, click the Archive dropdown and select Add to Archive from the list of options
Enter your desired WordPress backup filename. For example wpbackup
Click OK and wait for the archiving process to complete
When complete, verify that a new wpbackup.zip
file is available in your httpdocs
directory
Navigate to Databases on the main navigation bar
Find your target database, and click Export Dump
In the Export Dump dialog, select the httpdocs
directory, and enter your desired WordPress database backup filename. For example wpdb.zip
Click OK to back up your WordPress database
When complete, navigate to Files and verify that a new .sql.zip
file is available in your target directory httpdocs
Navigate to Websites & Domains
Scroll and find your WordPress domain name
Within the domain section, click FTP to open the FTP Accounts page
Click Add an FTP Account, and enter your desired username in the FTP account name
field. For example wpbackup
Click the Home directory and set it to /
Enter a strong password and confirm the password for your FTP account
Click OK to save changes
Verify that the new FTP account is available on the accounts page and ready to handle connections to your Dekopon Stack Server
Using SSH, access your Dekopon Stack WordPress server
$ ssh webadmin@SERVER-IP
Establish an FTP connection to your Plesk server
$ ftp wpbackup@example.com
Switch to the httpdocs
directory
> cd httpdocs
Download the WordPress files archive file you generated earlier
> get wpbackup.zip
Download the WordPress database backup file
> get wpdb.zip
Verify that the FTP download process completes without errors and exit the FTP console
> exit
List files in your working directory
$ ls
Verify that the WordPress files and database backup are available
Extract WordPress files from the backup archive to your web root directory
$ sudo unzip wpbackup.zip -d /var/www/example.com/
When complete, grant the web server ownership permissions to the WordPress web root directory
$ sudo chown -R www-data:www-data /var/www/example.com
Extract the WordPress database from the backup archive
$ unzip wpdb.zip
Restore your WordPress database to the new database on your server
$ mysql -u adminuser -p wordpressdb < database.sql
When the restoration is complete, log in to the MySQL database server
$ mysql -u adminuser -p
Switch to the WordPress database
mysql> USE wordpressdb;
View all database tables to verify that the correct WordPress structure is available
mysql> SHOW TABLES;
Output:
+----------------------------+
| Tables_in_wordpressdb |
+----------------------------+
| wp_actionscheduler_actions |
| wp_actionscheduler_claims |
| wp_actionscheduler_groups |
| wp_actionscheduler_logs |
| wp_as3cf_items |
| wp_commentmeta |
| wp_comments |
Exit the MySQL database console
mysql> EXIT
You have transferred your WordPress site files from Plesk to your Dekopon Stack Server, configure the necessary DNS records, and generate SSL certificates to redirect all user traffic and activate WordPress on the server
Depending on your domain registrar, you do not need to change nameservers, unless hosted by the same cPanel or Plesk provider. Instead, you need to change the domain records to point to your Dekopon Stack Server which handles all client requests. In this section, configure your DNS records to point to the new WordPress server as described in the steps below.
Log in to your domain registrar such as eNom
, Namecheap
, Cloudflare
, GoDaddy
, among others
If your domain registrar doubles as your hosting provider, migrate your domain to another registrar such as Cloudflare
and change your nameservers to:
ns1.Dekopon Stack.com
ns2.Dekopon Stack.com
To effectively use the above Dekopon Stack nameservers, log in to the Dekopon Stack customer portal, and add the domain name to link to your Dekopon Stack account.
Find and click your domain name to open the DNS records
On the DNS records page, find and edit the domain A record
Change the IPV4 Address to your Dekopon Stack WordPress server's public IP Address
Wait for the DNS propagation to complete, when using Dekopon Stack DNS, changes should reflect in less than 3 hours.
If you have email accounts linked to your WordPress site, set up a mail server and change the domain MX records to point to the new server.
To enable HTTPS access and redirect HTTP requests on your WordPress site, generate SSL certificates for your WordPress site domain. In this section, use the free Certbot Let’s Encrypt Client tool to request a new SSL certificate for your domain as described below.
Verify that Certbot is available on the server
$ sudo certbot --version
When unavailable, install Certbot using the Snap package manager
$ sudo snap install certbot --classic
Generate an SSL certificate for your WordPress domain name. Replace example.com
, admin@example.com
with your actual domain and active email address respectively
$ sudo certbot --nginx -d example.com -m admin@example.com
Verify that Certbot auto-renews your SSL certificate upon expiry
$ sudo certbot renew --dry-run
When the command is successful, Certbot auto-renews your SSL certificate every after 90 days.
Using a web browser such as Firefox, visit your WordPress site
https://example.com
Verify that your site loads correctly without any errors
Log in to the WordPress administrator dashboard
https://example.com/wp-admin
Navigate to Tools and select Site Health
from the drop-down list.
Click Info, and expand the Server drop down to view information about your WordPress server. Verify that the values change compared to your previous WordPress server details.
Click to expand File Permissions and verify that all directories are writable
Expand Database to view your MySQL database details. Verify that the new database and user you created earlier appear on the list
Your WordPress site is ready to use. You can safely add new posts, pages, or WooCommerce elements that load directly from your new WordPress server
The WordPress migration process should return no errors, nor should the site users detect any changes while using the site. But if in any way your WordPress site returns any error, fix it as defined in the steps below
View the web server logs to find the exact source of the error
$ sudo cat /var/log/nginx/error.log
Verify that PHP-FPM is running correctly without any errors.
$ sudo systemctl status php-fpm
Verify that the Nginx configuration returns no configuration errors
$ sudo nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Verify that the Nginx web server is running correctly without any error
$ sudo systemctl status nginx
Output:
● nginx.service - A high-performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-07-27 13:46:34 UTC; 1 month 1 day ago
Docs: man:nginx(8)
Main PID: 101326 (nginx)
Navigate to your WordPress webroot directory.
$ sudo cd /var/www/example.com
View the contents of the wp-config.php
file and verify that they match your WordPress user and the database you created earlier
$ cat wp-config.php
Log in to the MySQL database using the WordPress user in your wp-config.php
file
$ mysql -u adminuser -p
Verify that the user has access to the WordPress database
mysql> SHOW DATABASES:
The WordPress database should display in your output:
Exit the MySQL console
mysql> EXIT
View the list of installed PHP extensions on your server, and verify that the mysqli
extension is available on the list
$ php -m
Output:
[PHP Modules]
mbstring
memcached
msgpack
mysqli
mysqlnd
openssl
pcntl
Using Certbot, generate a new Let’s Encrypt SSL certificate. Replace example.com
with your actual domain name.
$ sudo certbot -d example.com -m adminuser@example.com --agree-tos
Verify that the SSL certificate installs correctly to the server. If it fails, verify the DNS propagation is complete, and the ports 80, 443
are open on the server firewall.
View the UFW firewall table
$ sudo ufw status
Allow the HTTP and HTTPS ports if they’re missing
$ sudo ufw allow 80,443/tcp
Restart the firewall to save changes
$ sudo ufw reload
Test auto-renewal to verify that the certificate renews upon expiry
$ sudo certbot renew --dry-run
This error occurs when the web server does not have read privileges on your WordPress web root directory. Or, reset WordPress permalinks in the administrator dashboard to correct your post and page URLs. To grant the Nginx web server correct privileges to WordPress files, follow the steps below.
Switch to the Nginx sites-available
directory.
$ cd /etc/nginx/sites-available/
View the WordPress virtual host configuration
$ cat example.com
Verify that your WordPress host configuration file points to the correct webroot directory, and index.php
is available on the index list
root /var/www/example.com;
index index.php index.html;
View the web root directory permissions
$ ls -l /var/www/example.com
Grant the web server ownership permissions to the directory
$ sudo chown -R www-data:www-data /var/www/example.com
Restart Nginx to apply changes
$ sudo systemctl restart nginx
Visit your WordPress site and verify that it loads correctly without the error
https://example.com
If the error persists, view the Nginx error.log
to find the exact source of the error
$ sudo cat /var/log/nginx/error.log
In this article, you migrated your WordPress site from cPanel or Plesk to a Dekopon Stack server. Depending on your source hosting environment, your website users may not notice the change while migrating your WordPress site. This means, your WordPress site must not experience any downtime. However, notable differences in the WordPress site speed, ranking, and reliability reflect when you make the change.
To improve your WordPress site performance and implement more solutions on the server, visit the following resources: